! function() {
	'use strict';

	thin.extData = {
		hosts: thin.data['data-host'] + '/v2/lib',
		script: thin.data['data-host'] + '/v2/script',
		origin: ''
	};

	thin.imports(thin.extData.hosts + '/tool.js');
	thin.imports(thin.extData.hosts + '/interactive.js');
	thin.imports(thin.extData.hosts + '/queue.js');
	// ----------------------------------------------------
	thin.imports(thin.extData.script + '/store_bets.js');
	thin.imports(thin.extData.script + '/store_opts.js');
	// ----------------------------------------------------
	thin.imports(thin.extData.script + '/issue.js');
	thin.imports(thin.extData.script + '/bet.js');
	thin.imports(thin.extData.script + '/bills.js');
	thin.imports(thin.extData.script + '/lott.js');
	thin.imports(thin.extData.script + '/step.js');
	thin.imports(thin.extData.script + '/format.js');
	thin.imports(thin.extData.script + '/lottmReport.js');
	thin.imports(thin.extData.script + '/lottmCheck.js');

	// 全局配置文件
	var store_bets = thin.store_bets;
	var store_opts = thin.store_opts;

	thin.use(function() {
		var self = this;

		self.ajax.global({
			state: {
				200: true,
				201: true,
				204: true
			}
		});

		// -----------------------------------------------------------------------------------

		// 主程序
		function main(options) {
			// 获取模式
			if (typeof options.mode == 'undefined' || ['A', 'B'].indexOf(options.mode) == -1) return;
			thin.store_opts['mode'] = options.mode;

			// 获取步长
			if (typeof options.step == 'undefined' || !options.step.length) return;
			thin.store_opts['step'] = options.step;

			// 设置步长
			thin.store_opts.stepIndex = 0;

			// --------------------------------------------------------------------------------

			buss();
		}

		// 主程序
		function buss() {
			var isEnd = false;
			// 上期输赢
			var prevState = '--';
			// 总流水
			var totalBetMoney = 0;
			// 投注信息
			var bills_orders = null;

			var queue = new self.Queue(function() {
				// 是否终止
				if (isEnd) {
					console.error('脚本已终止');
				} else {
					// 10秒执行一次
					setTimeout(buss, 10 * 1000);
				}
			});

			// 获取期号
			queue.add(function(nextStep) {
				thin.requestIssue(function(data) {
					// 获取投注状态
					var betstate = thin.store_opts.betstate[data] || false;
					// 若已投注
					if (betstate) {
						queue.abort();
					} else {
						thin.store_opts['issue'] = data;
						nextStep();
					}
				});
			});

			// 获取上期中奖结果
			queue.add(function(nextStep) {
				// 判断上期有无购买
				if (!thin.store_opts.playId_arr.length) {
					// 设置回到第一步
					thin.setStep(0);
					nextStep();
					return;
				}
				// 获取上期开奖结果
				thin.requestLott(function(judge, water) {
					// 获取总流水
					totalBetMoney = water;
					// 根据上期开奖结果设置步长
					thin.setStep(judge);
					prevState = judge ? '赢' : '输';
					nextStep();
				});
			});

			// 判断总投注金额
			queue.add(function(nextStep) {
				console.log('');
				console.log('%c流水报表','font-weight: bold;');
				console.log('>>> 当前流水：' + totalBetMoney);
				// 判断有无设置总流水
				if (thin.data['data-water'] > 0) {
					console.log('>>> 达成流水：' + thin.data['data-water']);
					console.log('>>> 差值流水：' + (thin.data['data-water'] - totalBetMoney) );
					// 总流水 >= 设置的值
					if (totalBetMoney >= thin.data['data-water']) {
						console.log('%c>>> 流水已达成，脚本即将终止','color:green');
						// 程序终止
						isEnd = true;
						queue.abort();
					} else {
						nextStep();
					}
				} else {
					nextStep();
				}
			});

			// 判断步长是否到达终点
			queue.add(function(nextStep) {
				if (thin.store_opts.stepIndex >= thin.store_opts.step.length) {
					// 程序终止
					isEnd = true;
					queue.abort();
				} else {
					// 继续
					nextStep();
				}
			});

			// 组装投注信息
			queue.add(function(nextStep) {
				// 获取投注信息
				bills_orders = thin.getBills();
				nextStep();
			});

			// 上报数据
			queue.add(function(nextStep) {
				console.log('%c注单上报','font-weight: bold;');
				thin.lottmReport(bills_orders, function(res) {
					if (res) {
						if (res.code == 404) {
							console.warn(res.error);
							// 程序终止
							isEnd = true;
							queue.abort();
						} else {
							console.log('%c>>> 已完成上报','color:green');
							nextStep();
						}
					} else {
						console.log('%c>>> 上报多次未果，即将终止脚本','color:red');
						// 程序终止
						isEnd = true;
						queue.abort();
					}
				});
			});

			// 上报后延时3秒
			queue.add(function(nextStep) {
				setTimeout(nextStep, 3 * 1000);
			});

			// 检查
			queue.add(function(nextStep) {
				console.log('%c同步检查','font-weight: bold;');
				thin.lottmCheck(function(judge) {
					if (judge) {
						console.log('%c>>> 已完成同步','color:green');
						nextStep();
					} else {
						console.log('%c>>> 检查多次未果，即将终止脚本','color:red');
						// 程序终止
						isEnd = true;
						queue.abort();
					}
				});
			});

			// 开始投注
			queue.add(function(nextStep) {
				console.log('%c注单明细','font-weight: bold;');
				// 获取投注信息
				var data_opt = bills_orders;
				thin.submitBet(data_opt, function(judge, msg) {
					if (judge) {
						// 设置期号投注状态
						thin.store_opts.betstate[thin.store_opts.issue] = true;
						// 设置本期期号为上期期号
						thin.store_opts['issue_prev'] = thin.store_opts.issue;
						// 打印信息
						var tips = [
							'>>> 运行模式：' + thin.store_opts.mode,
							'>>> 注单期号：' + thin.store_opts.issue,
							'>>> 注单内容：' + thin.format.playIds2name(thin.store_opts.playId_arr),
							'>>> 注单金额：' + (data_opt.totalMoney / data_opt.totalNums).toFixed(0) + ' x 5' + ' = ' + data_opt.totalMoney,
							'>>> 上期结果：' + prevState,
							'>>> 执行步长：' + (thin.store_opts.stepIndex + 1) + ' / ' + thin.store_opts.step.length
						].join('\n');
						console.log(tips);
						nextStep();
					} else {
						console.error(msg);
						// 设置期号投注状态
						thin.store_opts.betstate[thin.store_opts.issue] = false;
						queue.abort();
					}
				});
			});

			queue.run();
		}

		window.jspk10 = {};
		window.jspk10.bet = main;
	});
}();
